#ifndef __JK_CONTAINER_H_
#define __JK_CONTAINER_H_

#include "jk_base.h"
#include "jk_iterator.h"
#include "jk_traits.h"

JK_LIB_NAMESPACE_BEGIN



template <typename T, typename ContainerType>
class Container
{
public:
    typedef typename ContainerTraits<ContainerType>::value_type         value_type;
    typedef typename ContainerTraits<ContainerType>::reference          reference;
    typedef typename ContainerTraits<ContainerType>::const_reference    const_reference;
    typedef typename ContainerTraits<ContainerType>::pointer            pointer;
    typedef typename ContainerTraits<ContainerType>::const_pointer      const_pointer;
    typedef typename ContainerTraits<ContainerType>::size_type          size_type;
    typedef ForwardIterator<ContainerType>                              forward_iterator;
    typedef forward_iterator                                            iterator;

public:
    virtual ~Container() {}

public:
    virtual int GetNumOfElements() const = 0;
    virtual iterator Begin() = 0;
    virtual iterator End() = 0;
};




JK_LIB_NAMESPACE_END

#endif //!__JK_CONTAINER_H_
